<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Article</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
<link rel="stylesheet" href= "../assets/markdownLayout/git_md.css">
<link rel="stylesheet" href= "../assets/theme/theme_fresh.css">
<link rel="stylesheet" href= "../assets/hightlightStyle/atom-one-light.css">

<style>
    .markdown-body{
        box-sizing: border-box;
        min-width: 200px;
        max-width: 980px;
        margin: 0 auto;
        padding: 45px;
    }

    @media (max-width: 767px) {
        .markdown-body {
            padding: 15px;
        }
    }
</style>


</head>
<body>
    
    <!--header-->
    <div class="header">
    <header>
        <div class="logo"><a href="../index.html"><span>hh2o4</span></a></div>
        <nav>
            
                <li> <a href="#">articles</a> </li>
                <li> <a href="../contact.html">contact</a> </li>
                <li> <a href="#">pictures</a> </li>
            
        </nav>
    </header>
</div>

    <!--content-->
    <div class="content">
        <h1>对象的属性</h1>
        <div class="info"><span class="date">发表时间: 2017-04-27</span></div>
        <article class="markdown-body">
            <p>对象的属性有很多性质，以及对他们进行操作的方法，这篇文章主要总结了对象属性的类型，性质，以及对对象属性的操作方法。</p>
<h2 id="-">对象的属性</h2>
<p>分两类讨论：</p>
<ul>
<li>访问器属性</li>
<li>数值属性</li>
</ul>
<h3 id="-">访问器属性</h3>
<ul>
<li>访问器属性不包含数值，只包含一对getter和setter函数，它的特性有[[configurable]]、[[enumrable]]、[[get]]、[[set]]</li>
</ul>
<h3 id="-">数值属性</h3>
<ul>
<li>数值属性包含数值，它的特性有[[configurable]]、[[enumrable]]、[[writable]]、[[value]]</li>
</ul>
<h2 id="-">读取对象属性的特性</h2>
<p>Object.getOwnPropertyDescriptor()方法,返回一个对象。
用法：Object.getOwnPropertyDscriptor(object,&quot;property-name&quot;);</p>
<h2 id="-">创建对象</h2>
<p>根据Nicholas C.Zakas的JavaScript高级程序设计（第三版）第6章总结。</p>
<ul>
<li><p>使用对象字面量</p>
</li>
<li><p>使用new Object(),为新对象的属性赋值</p>
</li>
<li><p>工厂模式</p>
</li>
<li><p>构造函数模式 
new操作符调用，对象属性的添加用this.property,对象之间不共享属性</p>
</li>
<li><p>原型模式 new操作符调用，对象属性的添加用function.prototype.property,对象之间可共享属性,缺点是不能通过构造函数传递参数，并且不同实例可能会对共享的属性（特别是引用类型的属性）进行不当的改变。</p>
</li>
<li><p>组合使用构造函数模式和原型模式
目前最广泛，认可度最高，默认的自定义类型方法</p>
</li>
<li><p>动态原型模式
没看懂</p>
</li>
<li><p>寄生构造函数模式
跟工厂模式有什么区别？工厂模式不用new调用，寄生构造函数模式要用new调用。</p>
</li>
<li><p>稳妥构造函数模式
只能用对象的方法访问构造函数初始化对象时传入的参数。</p>
</li>
</ul>

        </article>
    </div>

    <!--footer-->
    <footer>
    
    <p>©2017-2018 &nbsp; (o^.^o) &nbsp; hh2o4</p>
    <p>Themed by hh2o4</p>
    
</footer>
    
</body>
</html>